package com.Reader;

import java.io.File;
import java.util.ArrayList;
import java.util.regex.Pattern;
import java.util.regex.Matcher;

import com.Modele;
import com.Exception.NotReadException;

/**
 * ReaderInfo récupère tout les modèles d'un fichier
 * @author florent
 *
 */
public class ReaderInfo extends Reader{

	private Pattern pattern_modele_info = Pattern.compile("^(.+)[(](.*)[)]$");
	//expression reguliere permettant de recuperer un modele :
	// predicat : 1er (.*), argments : 2eme (.*)
	
	/**
	 * Construit un Reader avec fichier
	 * @param fichier fichier
	 */
	public ReaderInfo(File fichier){
		super(fichier);
	}

	/**
	 * Construit un modèle passé à partir d'une ligne passée en argument
	 * @param line ligne a analyser
	 * @throws NotReadException
	 */
	private void getModele(String line) throws NotReadException{

		Matcher matcher_modele_info = pattern_modele_info.matcher(line); //teste si on a un modèle
		
		if(matcher_modele_info.matches()){ //si on a un modèle
			
			String predicat = matcher_modele_info.group(1); //récupère son prédicat
			
			//créé le modèle, et son négatif, puis l'ajoute dans la liste statique de modèles
			//en évitant les doublons de modèle
			
			/*Modele modele = */Modele.newModele(predicat,false,matcher_modele_info.group(2).split(","));
			/*Modele modele_negative = */Modele.newModele(predicat,true,matcher_modele_info.group(2).split(","));
		}

	}

	/**
	 * Récupère tout les modèles d'un fichier
	 * @return la liste sans doublons de modèles
	 */
	public ArrayList<Modele> getModeles(){
		
		open();
		
		try{
			String line;
			while((line = file.readLine()) != null){
				try{
					getModele(line);
				}catch(NotReadException e){
					System.err.println(e.getMessage());
					//pas une modele
				}
			}
		}catch(Exception e){
			e.printStackTrace();
		}
		
		close();
		
		return Modele.getModeles(); //retorune la liste sans doublons de modèles
		
	}

}
